教程 | 使用Mapbox Unity SDK进行游戏开发
今年,Mapbox全新发布了Mapbox Unity SDK,使Mapbox的地图、导航和定位功能可以在Unity游戏引擎中轻松实现。除了游戏,Mapbox也是VR、AR和模拟类的极其可靠的地理位置平台。我们的主要服务对象包括:类似Pokemon-Go的地理位置游戏,模拟游戏,地理类排行榜,地理类社交聊天以及位置相关广告用户等。
自从我们在Unity大会上推出Mapbox Unity SDK以来,获得了各类游戏开发者的极大关注,很多小伙伴们迫不及待地开始使用我们的Unity SDK,但由于目前我们的Mapbox Unity SDK文档只有英文版,给中文开发者带来了诸多不便。所以,今天我们特地出了一个简单的教程来教大家如何使用Mapbox Unity SDK进行游戏开发,让我们开始吧!
1. 使用Mapbox Unity SDK
创建新的Unity项目
打开Unity,创建一个新的项目
获取Unity Package 安装包
打开 https://www.mapbox.com/unity/,单击 Download the SDK下载SDK包。
打开Unity,在 Unity 中导入程序包:Assets菜单—>Import package—>Custom Package
配置您的 Mapbox API Token
您首先需要访问令牌(access token)才能使用您的 Mapbox 帐户功能。如果已经注册了Mapbox账号,可以直接打开https://www.mapbox.com/studio/account/tokens/ 来查看Access Token。如果没有,还不赶快注册哦。
在 Unity 中配置 API Access
从 Unity Editor 菜单中单击 Mapbox-> Configure Access。将您的令牌粘贴到Token字段中。假设您的令牌有效,它会被保存到 StreamingAssets / MapboxAccess.text 里的一个文本文件中。此外,你也可以直接打开MapboxAccess.text 将您的令牌粘贴进去。
备注:Git repo(Git 本地仓库) 中不存储该文件,以防止个人令牌不慎被贡献者使用。在运行时,该文件的内容将被读取并缓存以供 FileSource 请求获取。有关详细信息,请参阅Assets/Mapbox/Core/Unity/MapboxAccess.cs 。
开始游戏开发
接下来,您就可以使用我们的Unity SDK进行基于地图、地理位置等方面的游戏开发了。
你可以创建自己的Scene,然后使用Unity SDK中的一些组件来创建自己想要的Factories、Filters、Layer Visualizer、Modifiers、MapVisualization等。右击文件夹可查看可用的Mapbox组件。
添加Mapbox Factory
本教程中,我们使用Mapbox的组件创建Mesh Factory、Map Image Factory,然后分别设置Map Type、Style、Map ID。你可以选择预设的Mapbox地图(Basic Mapbox Style),也可以添加在Mapbox Studio中设计发布的自定义地图。
添加MapVisualization
在项目中创建MapVisualization,并将刚才创建的Mesh Factory、Map Image Factory加到Factories中。
添加MapController
创建一个Scene,并添加MapController,设置Map Visulization属性为刚才创建的MapVisualization。
执行场景Scene
最后,让我们来执行刚刚创建的Scene!(以上设置,具体可参考Examples中Mesh Generation Basics和
Mesh Generation Styles示例)。
2. 相关示例
Mapbox Unity SDK中包含了一系列的示例(Examples文件夹中),供开发者参考,包括:
Mesh Generation Basics
Assets/Mapbox/Examples/MeshGenerationBasics/MeshGeneration.unity
使用 TerrainFactory、
MapImageFactory
和 MeshFactory
来一起生成分层设色地图。
Mesh Generataion Pois
Assets/Mapbox/Examples/MeshGenerationPois/PoiGeneration.unity
在Mesh Generation Basics
基础上,将 PoiVisualizer
(PoiDemoPoiVisualizer
)添加到 MeshFactory,来显示POI点。
Mesh Generation Styles
Assets/Mapbox/Examples/MeshGenerationStles/StylingDemoMeshGeneration.unity
使用 TypeFilters
筛选出特定要素来进行处理。我们选择了在网格生成中排除学校( schools)
。此外,您可以使用 ModifierStacks
进一步自定义特定要素(例如,定制使用不同的颜色库)。
正向地理编码(Forward Geocoder)
Assets/Mapbox/Examples/Playground/Scenes/ForwardGeocoder.unity
正向地理编码请求将从地名查询中获取 GeoJSON。每次编辑用户输入字段后都会发送一个新的请求。
反向地理编码(Reverse Geocoder)
Assets/Mapbox/Examples/Playground/Scenes/ReverseGeocoder.unity
反向地理编码请求将从位置查询获取GeoJSON。位置查询字符串的格式必须为纬度,经度
。每次编辑用户输入字段后都会发送一个新的请求。
Directions
Assets/Mapbox/Examples/Playground/Scenes/Directions.unity
输入起始位置查询(例如“San Francisco,CA”),以及目的地查询(例如“Los Angeles, CA”)。当地理编码请求已经完成时,将执行 directions 请求。每次编辑了开始或目标用户输入字段后都会发送新的请求。Directions 结果(如果可用)将(以JSON的形式)被记录到用户界面。
栅格切片(raster tiles)
Assets/Mapbox/Examples/Playground/Scenes/RasterTile.unity
使用正向地理编码请求从 Map 对象获取样式化了的栅格切片。每当更改缩放或样式时,或者当用户输入字段被编辑时,都会发送一个新的请求。
矢量切片
Assets/Mapbox/Examples/Playground/Scenes/VectorTile.unity
使用正向地理编码请求从矢量切片获取 GeoJSON。每次编辑用户输入字段时都会发送新的请求。返回结果是GeoJSON具有要素集合。
Drive
Assets/Mapbox/Examples/Drive/Drive.unity
在MapVisualization
框架内使用Mapbox Traffic 和 Mapbox Directions 数据。DirectionsHelper
通过 Latitude/Longitude
的形式将Transform
位置传递给 DirectionsFactory
作为航点(waypoint)。最多可以使用 25 个航点。可参考 DriveDirectionFactory.asset
来分析生成的路线是如何被渲染的。
Slippy Vector Terrain
Assets/Mapbox/Examples/SlippyVectorTerrain/SlippyDemo.unity
创建 slippy map ,并附加到 MapController
游戏对象的 Slippy
组件,可根据地图中 Camera 的位置来请求获取新的切片。
立体像素(Voxels)
Assets/Mapbox/Examples/Voxels/VoxelWorld.unity
基于Minecraft 风格的示例游戏展示了如何通过与传统不大一样的方式,使用 Mapbox 数据来构建地图或游戏世界。
LocationProvider
Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity
构建您当前(设备)所在位置的地图;基于真实的或模拟的位置和前进方向来更新虚拟播放器(virtual player)的位置和倾斜度(rotation);使用模拟位置提供程序(location providers)在 Unity 编辑器中进行测试。
3. 小结
Mapbox Unity SDK在最初版的时候就面向C#游戏开发者,便于整合Mapbox的地图、定位和路径在Unity驱动的应用。
我们的主要功能有:
地图:生成原生Unity物体,用矢量或栅格格式显示
动态瓦片上传、卸载
用Geocoding API标注搜索资产
用Direction API规划从A点到B点
帮助物体生成、网格生成和皮肤生成
管理协调空间转换
提供案例,帮助你开始
还不快来使用我们的Mapbox Unity SDK。
另外,我们Mapbox Unity SDK的详细的API文档即将推出,敬请关注我们的公众号哦!
下周同一时间,我们将发布进阶版教程,教大家如何运用Mapbox Unity SDK制作3D城市建筑!约不约?